package com.chagee.store.operation.server.config;

import com.xxl.job.core.executor.XxlJobExecutor;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.commons.util.InetUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class XxlJobConfig {

	private final Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);


	@Value("${xxl.job.admin.addresses}")
	private String adminAddresses;

	@Value("${xxl.job.admin.accessToken}")
	private String accessToken;

	@Value("${xxl.job.executor.appname}")
	private String appName;

	@Value("${xxl.job.executor.port}")
	private int port;

	@Value("${xxl.job.executor.logpath}")
	private String logPath;

	@Value("${xxl.job.executor.logretentiondays}")
	private int logRetentionDays;


	@Bean
	//@Lazy
	public XxlJobExecutor xxlJobExecutor(InetUtils inetUtils) {
		String ip = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
		logger.info(">>>>>>>>>>> xxl-job config init.");
		XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
		xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
		xxlJobSpringExecutor.setAppname(appName);
		xxlJobSpringExecutor.setIp(ip);
		xxlJobSpringExecutor.setPort(port);
		xxlJobSpringExecutor.setAccessToken(accessToken);
		xxlJobSpringExecutor.setLogPath(logPath);
		xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

		return xxlJobSpringExecutor;
	}
}
